package com.cn.delan.core.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;

/**
 * 日期相关的操作,将日期类型转换为对应的字符串或将字符串转换成为Date对象
 * @author BingGo
 *
 */

public class DateUtil {
	/**
	 * 用于存储Dete对象的格式化工具，对已一种日期格式只需要实例化一个日期格式类
	 */
	private static Hashtable<String,SimpleDateFormat> dateFormatMap = new Hashtable<String,SimpleDateFormat>();
	/**
	 * 获取系统中的日期格式类,此方法确保系统中日期格式类的唯一性.
	 * @param pattern
	 * @return
	 */
	private static SimpleDateFormat getDateFormat(String pattern){
		SimpleDateFormat dateFormat = dateFormatMap.get(pattern);
		if(dateFormat==null){
			dateFormat = new SimpleDateFormat(pattern);
			dateFormatMap.put(pattern, dateFormat);
		}
		return dateFormat;
	}
	/**
	 * 将对应的时间量转换为日期
	 * @param date 时间量
	 * @return
	 */
	public static Date toDate(long date){
		return new Date(date);
	}
	/**
	 * 将一个字符串按yyyy-MM-dd转换成日期格式
	 * @param date 日期值
	 * @return
	 */
	public static Date toDate(String date){
		return toDate(date,null);
	}
	/**
	 * 将一个字符串转换成日期格式
	 * @param date 日期值
	 * @param pattern 日期格式
	 * @return
	 */
	public static Date toDate(String date, String pattern) {
		if((""+date).equals("")){
			return null;
		}
		if(pattern == null){
			pattern = "yyyy-MM-dd";
		}
		SimpleDateFormat dateFormat = DateUtil.getDateFormat(pattern);
		Date newDate = new Date();
		try {
			newDate = dateFormat.parse(date);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return newDate;
	}
	/**
	 * 将时间量转换为对应的字符串
	 * @param date 时间量
	 * @return
	 */
	public static String toString(long date){
		return toString(toDate(date),null);
	}
	/**
	 * 将时间量转换为指定格式的字符串
	 * @param date 时间量
	 * @param pattern 日期格式
	 * @return
	 */
	public static String toString(long date, String pattern){
		return toString(toDate(date),pattern);
	}
	/**
	 * 把日期转换成字符串型
	 * @param date 日期值
	 * @return
	 */
	public static String toString(Date date){
		return toString(date,null);
	}
	/**
	 * 把日期转换成yyyy-MM-dd格式的字符串
	 * @param date 日期值
	 * @param pattern 日期格式
	 * @return
	 */
	public static String toString(Date date, String pattern){
		if(date == null){
			return "";
		}
		if(pattern == null){
			pattern = "yyyy-MM-dd";
		}
		String dateString = "";
		SimpleDateFormat dateFormat = DateUtil.getDateFormat(pattern);
		try {
			dateString = dateFormat.format(date);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return dateString;
	}
	/**
	 * 获取当前日期的yyyy-MM-dd格式字符串
	 * @return
	 */
	public static String now(){
		return now(null);
	}
	/**
	 * 获取指定样式的当前日期字符串
	 * @param pattern 日期格式
	 * @return
	 */
	public static String now(String pattern){
		return toString(new Date(),pattern);
	}
	
}
